const BaseService = require("./BaseService.js")
const moment = require('moment')

class RoleService extends BaseService {
  // 角色列表
  async list(params){
    let model = this.Db('role');
    // 角色名称
    if(params.name){
      model = model.where('name','like',`%${params.name}%`)
    }
    // 创建时间
    if(params.create_time){
      model = model.whereBetweenTime('create_time',params.create_time[0],params.create_time[1])
    }
    let result = ''
    // 判断是否有分页
    if(params.current && params.size){
      result = await model.page(params.current,params.size).select()
    }else{
      result = await model.select()
    }
    // 总条数
    let totalCount = await model.count()
		return {
      list: result,
      totalCount
    }
  }

  // 创建角色
  async create(params){
    let result = await this.Db('role').where('name','=',params.name).find()
    if(typeof result == 'object'){
      return false
    }else{
      this.Db('role').insert({
        name: params.name,
        menu_ids: params.menu_ids,
        create_time: moment().format('YYYY-MM-DD HH:mm:ss'),
        update_time: moment().format('YYYY-MM-DD HH:mm:ss')
      });
      return true
    }
  }

  // 编辑角色
  async edit(params){
    let result = await this.Db('role').where('id','=',params.id).find()
    // 没有修改名称
    if(result.name == params.name){
      this.Db('role').where('id','=',params.id).update({
        name: params.name,
        menu_ids: params.menu_ids,
        update_time: moment().format('YYYY-MM-DD HH:mm:ss')
      });
      return true
    }else{
      // 修改成已有的名称
      let role = await this.Db('role').where('name','=',params.name).find();
      if(typeof role == 'object'){
        return false
      }else{
        this.Db('role').where('id','=',params.id).update({
          name: params.name,
          menu_ids: params.menu_ids,
          update_time: moment().format('YYYY-MM-DD HH:mm:ss')
        });
        return true
      }
    }
  }

  // 删除
  async deleteItem(params){
    // 判断是否有用户关联了该角色
    let result = await this.Db('user').where('role_id','=',params.id).find();
    if(typeof result == 'object'){
      return false
    }else{
      this.Db('role').where('id','=',params.id).delete()
      return true
    }
  }
}

module.exports = RoleService;